<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body></body>
  <script>
    /* 
        高阶函数
            - 如果一个函数的参数或返回值是一个函数，则这个函数就称为高阶函数
            - 为什么要将函数作为参数传递？
                - 1. 代码复用：将函数作为参数，可以将相同的逻辑代码抽取出来，实现代码的复用
                - 2. 扩展功能：将函数作为参数，可以扩展功能，比如可以将一个函数作为参数传递给另一个函数，实现函数的组合
                - 3. 延迟执行：将函数作为参数，可以延迟执行，比如可以将一个函数作为参数传递给另一个函数，实现函数的延迟执行


               
    */
    /* 
     在someFn（）函数执行时，可以记录一条日志
     在不修改原函数的基础上，为其增加记录日志的功能
     可以通过高阶函数，来动态的生成一个新函数

   */
    function someFn(fn) {
      return "hello";
    }
    function outer(cb) {
      return () => {
        console.log("日志...");
        const res = cb();
        return res;
      };
    }
    let result = outer(someFn)
  let d =   result()
  console.log(d);
  </script>
</html>
